package com.qf.test.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qf.test.pojo.DtsStorage;
import com.qf.test.service.StorageService;
import com.qf.test.util.ResponseUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 对象存储
 */
//解决前后端分离的问题
@CrossOrigin("*")
//表示这个类交给spring管理
@RestController
//类的访问路径
@RequestMapping("/storage")

public class StorageController {

    @Autowired
    private StorageService storageService;
    /**
     * 查询对象存储列表
     * @param key  根据key进行查询丶
     * @param name  根据名字进行查找
     * @param page  当前页 默认为1
     * @param limit  每页多少条数据
     * @param sort  排序字段名 默认按照add_time进行排序
     * @param order 排序方式 默认desc
     * @return
     */
    @GetMapping("/list")
    public Object list(String key, String name,
                       @RequestParam(defaultValue ="1" ) Integer page,
                       @RequestParam(defaultValue = "10") Integer limit,
                       @RequestParam(defaultValue = "add_time") String sort,
                       @RequestParam(defaultValue = "desc") String order
                       ){
        //1.查询并返回分页对象
        IPage<DtsStorage> iPage = storageService.queryStoragePage(key, name, page, limit, sort, order);
        //2.获取结果集
        List<DtsStorage> list = iPage.getRecords();
        //3.获取总条数
        long count = iPage.getTotal();
        //4.封装对象返回
        Map<String, Object> data = new HashMap<>();
        data.put("total",count);
        data.put("items",list);
        return ResponseUtil.ok(data);

    }

    /**
     * 文件上传
     * @param file
     * @retu
     */
    @PostMapping("/create")
    public Object add(@RequestParam("file")MultipartFile file) throws Exception{
        //1.获取文件名
        String filename = file.getOriginalFilename();
        if(StringUtils.isEmpty(filename)){
            throw new RuntimeException("上传的文件不能为空，不允许上传");
        }
        //2.获取文件扩展名
        String ext = filename.substring(filename.indexOf("."));
        //3.获取文件大小
        long size = file.getSize();

        //4获取文件内容
        byte[] content = file.getBytes();
        //5.上传并返回保存后的文件对象

        DtsStorage storage = storageService.add(filename, (int) size, ext, content);
        //6封装数据返回
        return ResponseUtil.ok(storage);

    }

    /**
     * 修改
     */
    @PostMapping("/update")
    public Object update(@RequestBody DtsStorage storage){
        int count = storageService.update(storage);
        if(count==0){
           return ResponseUtil.fail();
        }
        return ResponseUtil.ok();
    }
    /**SELECT *FROM dts_storage   这是查询所有的语句
     * 删除
     */
    @PostMapping("/delete")
    public Object delete(@RequestBody DtsStorage storage){
        //提取文件对象中的key 也就是阿里云里面保存的文件名
        String key = storage.getKey();
        //2.如果key为空 那么不允许删除
        if(StringUtils.isEmpty(key)){
            return ResponseUtil.badArgument();
        }
        //3.根据key调用service删除
        storageService.deleteByKey(key,storage);
        //4.返回
        return ResponseUtil.ok();
    }
}
